package edu.cuit.avatar.generic;

import java.util.ArrayList;

/**
 * 自定义栈: 先进后出的数据结构
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/7/14 10:21
 * @param <E> 类型化参数,使用时使用实际类型进行替换
 */
public class MyStack<E> {
    private ArrayList<E> stack = new ArrayList<>();

    /**
     * 将data元素压入栈顶
     * @param data 元素data
     */
    public void push(E data){
        stack.add(data);
    }

    /**
     * 如果栈为空，返回true
     * @return 空栈:true
     */
    public boolean empty(){
        return stack.isEmpty();
    }

    /**
     * 弹出栈顶元素
     * @return 栈顶元素
     */
    public E pop(){
        if(empty())
            throw new IllegalStateException("栈为空");
        return stack.remove(size() - 1);
    }

    /**
     * 查看栈顶的元素
     * @return 栈顶的元素
     */
    public E peek(){
        if(empty())
            throw new IllegalStateException("栈为空");
        return stack.get(size() - 1);
    }

    /**
     * 返回栈中元素个数
     * @return 元素个数
     */
    public int size(){
        return stack.size();
    }
}
